#ifndef CSTATE_H_GGJ
#define CSTATE_H_GGJ

class CCharacter;

template <class Entity>
class CState
{
public:
	virtual ~CState() {}
	void Enter(CCharacter* entity) { onEnter(entity); }
	void Exit(CCharacter* entity) { OnExit(entity); }
	void Execute(CCharacter* entity, float dt) { OnExecute(entity, dt); }
protected:
	CState() {}
private:
	virtual void OnEnter(CCharacter* entity) = 0;
	virtual void OnExit(CCharacter* entity) = 0;
	virtual void OnExecute(CCharacter* entity, float dt) = 0;
};

#endif // CSTATE_H_GGJ